#-*- codeing = utf-8 -*-
#@Time : 2020/9/7 13:19
#@Author : 阳某
#@File : pdf.py
#@Software : PyCharm
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
# from pdfminer.pdfdevice import PDFDevice
# from urllib.request import urlopen

# # 获取文档对象
# fp = open("20200907020217125753.pdf", "rb")
# # fp = open("http://cce.bit.edu.cn/docs/20200907020217125753.pdf")   #读取网页pdf
# # 创建一个与文档关联的解释器
# parser = PDFParser(fp)
# # PDF文档对象
# doc = PDFDocument()
# # 链接解释器和文档对象
# parser.set_document(doc)
# doc.set_parser(parser)
# # 初始化文档
# doc.initialize("")
# # 创建PDF资源管理器
# resource = PDFResourceManager()
# # 参数分析器
# laparam = LAParams()
# # 创建聚合器
# device = PDFPageAggregator(resource, laparams=laparam)
# # 页面解释器
# interpreter = PDFPageInterpreter(resource, device)
# # 使用文档对象得到页面内容
# for page in doc.get_pages():
#     # 使用页面解释器读取
#     interpreter.process_page(page)
#     # 使用聚合器获得内容
#     layout = device.get_result()
#     for out in layout:
#         if hasattr(out, "get_text"):
#             print(out.get_text())










# encoding : udf-8

"""
解析pdf文本保存到txt文件中
"""
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBoxHorizontal
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed, PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfparser import PDFDocument, PDFParser

path = './20200907020217125753.pdf'


def parse():
    fp = open(path, 'rb')   # 以二进制读模式打开
    praser = PDFParser(fp)
    # 创建一个PDF文档
    doc = PDFDocument()
    # 连接分析器 与文档对象
    praser.set_document(doc)
    doc.set_parser(praser)

    # 提供初始化密码
    # 如果没有密码 就创建一个空的字符串
    doc.initialize()

    # 检测文档是否提供txt转换，不提供就忽略
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    else:
        # 创建PDf 资源管理器 来管理共享资源
        rsrcmgr = PDFResourceManager()
        # 创建一个PDF设备对象
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        # 创建一个PDF解释器对象
        interpreter = PDFPageInterpreter(rsrcmgr, device)

        # 循环遍历列表，每次处理一个page的内容
        for page in doc.get_pages():  # doc.get_pages() 获取page列表
            interpreter.process_page(page)
            # 接受该页面的LTPage对象
            layout = device.get_result()
            for x in layout:
                if isinstance(x, LTTextBoxHorizontal):
                    with open(r'pdf.txt', 'w',encoding='utf-8') as f:
                        results = x.get_text()
                        print(results)
                        f.write(results + '\n')

if __name__ == '__main__':
    parse()
